const Service = require('egg').Service;
const _ = require('lodash');
const nodemailer = require('nodemailer');

class MailService extends Service {
    // 默认不需要提供构造函数。
    /*constructor(ctx) {
        super(ctx);
        //如果需要在构造函数做一些处理，一定要有这句话，才能保证后面 `this.ctx`的使用。
        // 就可以直接通过 this.ctx 获取 ctx 了
        // 还可以直接通过 this.app 获取 app 了
    }*/

    /**
     * 发送邮件
     * @param bcc
     * @param subject
     * @param html
     * @returns {Promise<*>}
     */
    async send({bcc, subject, html}) {
        if (_.isEmpty(bcc))
            throw new Error('缺少邮件接收者');
        if (_.isEmpty(subject))
            throw new Error('缺少邮件标题');
        if (_.isEmpty(html))
            throw new Error('缺少邮件内容');

        let sender = nodemailer.createTransport(this.app.config.mail);

        if (_.isArray(bcc))
            bcc = bcc.join(',');

        return new Promise((resolve, reject) => {
            sender.sendMail({from: this.app.config.mail.auth.user, bcc, subject, html}, err => {
                if (err) {
                    this.app.logger.error(err);
                    return reject(err);
                }
                resolve();
            });
        });
    }
}

module.exports = MailService;